- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 798
 
          ✨ Support Parameter in the CLI Option autocompletion functionality
          #1006
        
          New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
autocompletion functionality for compatibility with shell_complete
      | 
           Thanks for the PR! We'll get this reviewed and get back to you 🙏  | 
    
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
| 
           @bckohan: the tests are failing because there isn't a 100% code coverage with the new commits. Could you look into this? 🙏  | 
    
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
| 
           @svlandeg I've updated the docs and added the necessary tests. Should be good to go!  | 
    
| 
           Great, thanks! I've got this on my TODO list to review in detail, but realistically it might take me 1 or 2 more weeks to get to it 🙏  | 
    
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
| 
           Ok so looking at the diffs of these two PRs (this one and #974) it appears that all the changes from #974 are still included here verbatim. As such I think it's actually easier to review these changes separately, i.e. one PR at a time. I've also pulled out the typo changes to avoid cluttering the diff: #1077 (I should have done that from the get-go). @bckohan: do you see any reason not to merge #974 first, then continue working on the functionality from this PR?  | 
    
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
| 
           @bckohan in which way would it break downstream software?  | 
    
| 
           @tiangolo Its not exactly broken - but deprecation warnings are being thrown with no recourse to fix them because autocompletion does not pass the Parameter objects. There are also downstream completers that expect to be able to pass a CompletionItem back because they're setting the type field.  | 
    
| 
           I would think now there would be fewer warnings as the  And the other  
 I'm not sure I got this, could you share an example? It might also be useful to start in a GitHub Discussion with a minimal example we can copy paste that shows the problem (or if there are multiple problems, multiple examples).  | 
    
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
| 
           HI! I think its reasonable to expect significant usage of shell_complete for the following reasons: 
 I'm extensively using shell_complete with Parameter objects downstream. And there's evidence here of others trying. I also added example/explanation of why this is needed to the tutorial in the docs. And here's real world production code where I'm using  
 
  | 
    
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
| 
           I've separated out the fix to args here: #1134  | 
    
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
      
        
              This comment was marked as outdated.
        
        
      
    
  This comment was marked as outdated.
          📝 Docs previewLast commit 7734bcb at: https://bee8c5b3.typertiangolo.pages.dev Modified Pages | 
    
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This feature makes sense to me - e.g. being able to access param.name unlocks new functionality I can see being relevant to users.
I have some concerns about this part of the documentation historically using name as the parameter to be autocompleted. Because now using Parameter, we would go from accessing ctx.params.get("name") to ctx.params.get(param.name) with param.name being "name" in this particular case, which just adds unnecessary confusion at this point.
So, while I don't like adding more edits to a PR, I suggest to refactor all tutorial examples here to use user instead of name as the option we want to autocomplete. Just to 100% avoid this confusion.
I'll put this PR in draft and make those edits directly on the branch to then hopefully get this PR in a good state for merging.
autocompletion functionality for compatibility with shell_completeParameter in the CLI Option autocompletion functionality
      There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, even though this has exploded the diff, I really do think it's more clear to users this way, going from ctx.params.get("user") to ctx.params.get(param.name). I've reviewed everything in detail and think this looks good - I'm moving this to Tiangolo's internal TODO list to review.
Thanks again for all this work, @bckohan !
Cf issue: #949
Note, this
includes (and supersedes) the changes from #974 andimplements these suggestions #949 (comment), with a few differences.I attempted to push these changes to #974 but was asked to open a new PR here instead.
This PR does 3 things:
Allows autocompletion functions to accept a
click.core.Parameterargument. I think this is necessary because without it you can't define generic completer functions that don't know what CLI options or arguments they may be attached to and that need to alter their behavior based on how click has processed the arguments before the incomplete argument. Concrete example: you have an option or argument that accepts multiple values but you do not wish those values to be repeated.Allows CompletionItems to be returned in addition to strings and 2-tuples from autocompletion functions.
Fixes arg: edit this change was separated out in 🐛 Fix
argparameter of autocompletion #1134A reusable completer function tutorial has been added to the autocompletion tutorials